#ifndef SIGNALCONTAINER_H
#define SIGNALCONTAINER_H

#include <QObject>
#include <QVector>

#include "baseelement.h"

//Интервалы сигналов
struct Interval
{
    signed char signal;
    signed int time;
};

//Контейнер для сбора и хранения сигналов
class SignalContainer : public QObject
{
    Q_OBJECT

protected:
    // Массив сигналов
    QVector<Interval> signalsArray;

    // Количество сигналов
    int capacity;

public:
    // Служебный конструктор
    SignalContainer();

    // Создать пустой контейнер для входного сигнала
    explicit SignalContainer(BaseElement *source);

    // Источник сигнала
    BaseElement* source;

    // Метка контейнера
    QString label;

    // Индекс для учета порядка в диаграммах сигнала
    uint sortIndex;

    // Получить емкость контейнера
    int getCapacity();

    //Элементы
    const QVector<Interval>& getItems();

    // Добавить сигнал
    void addSignal(signed char signal);

    /*
     * Добавить сигналы из строки
     * Например : 0101010111010101
     * Используется только в ручных тестах логики
     */
    void addSignals(QString signal_string);

    //Добавить интервал сигнала
    void addInterval(Interval t);

    // Получить сигнал по индексу
    signed char at(int index);

    //Очистить список сигналов
    void clear();
};

#endif // SIGNALCONTAINER_H
